package com.jyx.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * 单例模式实现JDBC模版
 * 	单例模式有两种方式：1.预初始化 2.延迟加载
 * @author jyx
 * @email jiangyongxing@myzczk.com
 * @Title: JdbcUtils
 * @description: JdbcUtils
 * @date 2016年11月5日
 */
public class JdbcUtilsSing {

	private String url = "jdbc:mysql://localhost:3306/abc";
	private String user = "root";
	private String pwd = "root";
	
	// 1
	// private static JdbcUtilsSing instance = new JdbcUtilsSing();
	// 2
	private static JdbcUtilsSing instance = null;
	
	/**
	 * 获取实例
	 * 防并发处理，jdk1.5以上
	 * @return
	 */
	public static JdbcUtilsSing getInstance(){
		if(instance == null){
			synchronized (JdbcUtilsSing.class) {
				if(instance == null){
					return instance;
				}
			}
		}
		return instance;
	}
	
	/**
	 * 静态代码块注册驱动
	 */
	static{
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			throw new ExceptionInInitializerError(e);
		}
	}
	
	/**
	 * 获取资源
	 * @return
	 * @throws SQLException
	 */
	public Connection getConnection() throws SQLException{
		return DriverManager.getConnection(url,user,pwd);
	}
	
	/**
	 * 关闭资源释放资源
	 * @param rs 
	 * @param st 
	 * @param conn
	 */
	public void free(ResultSet rs,Statement st,Connection conn){
		try{
			if(rs != null) rs.close();
		}catch(SQLException e){
			e.printStackTrace();
		}finally{
			try{
				if(st != null) st.close(); 
			}catch(SQLException e){
				e.printStackTrace();
			}finally {
				try {
					if(conn != null) conn.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
	}
	
}
